#ifndef FILEHANDLER_H
#define FILEHANDLER_H

#include <QObject>
#include <QFile>
#include <QVariant>
#include <QUrl>

class FileHandler : public QObject
{
    Q_OBJECT
public:
    FileHandler(QObject* parent = nullptr);

    Q_INVOKABLE void sendFile(QUrl url);

    static FileHandler* instance();

    /**
     * @brief   : 回调函数，被TcpManager使用
     * @param   : magic 标识
     * @param   : header 文件描述信息
     * @param   : data   文件数据信息
     * @author  : BinWatson
     * @version : v1.0
     * @date    : 2022-06-22 09:38:31
     */
    Q_INVOKABLE void onRecvNewFile(qint64 magic, QByteArray data);
    Q_INVOKABLE void onNewFileBody(qint64 magic, QByteArray data);

    Q_INVOKABLE void cancleFileDialogPage();

public slots:
    void onSendFileComplete(QSharedPointer<QFile> file);
    void onSendBarNotice(QSharedPointer<QFile> file, qint64 magic, qint64 offset);

signals:
    void onSendFile(bool flag, QUrl url);
    // type 0 接收， 1 发送 进度
    void updateRatio(QVariant magic, QVariant ratio, QVariant type);
    //速度
    void updateRate(QVariant magic, QVariant rate, QVariant type);
    //文件类型
    void firstFileType(QVariant magic,QVariant fileName, QVariant type);
    //获取文件名
//    void getFileName(QVariant magic,QVariant filename);
    //文件发送完成在页面列表中删除
    void deleteFileList(QVariant magic);

    void fileDialogPageCancle();

private:
    bool runInLoop() const;
};

#endif // FILEHANDLER_H
